home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / parser / s_comment.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-02-08  |  1.0 KB  |  45 lines

  1.  
  2. # include     <ingres.h>
  3. # include     "scanner.h"
  4. # include    <sccs.h>
  5. # include    <errors.h>
  6.  
  7. SCCSID(@(#)s_comment.c    8.2    2/8/85)
  8.  
  9. /*
  10. ** COMMENT
  11. ** scans comments (as delimited by the tokens 'Tokens.bgncmnt'
  12. ** and 'Tokens.endcmnt') and removes them from the query text.
  13. */
  14. comment()
  15. {
  16.     register int        i, l;
  17.     register struct optab    *op;
  18.     register    char    *sp;
  19.     char            buf[3];
  20.  
  21.     /* find the end_of_comment operator */
  22.     for (op = Optab; op->term; op++)
  23.         if (op->token == Tokens.endcmnt)
  24.             break;
  25.     if (!op->term)
  26.         syserr("no end_of_comment token");
  27.  
  28.     /* scan for the end of the comment */
  29.     l = length(op->term);
  30.     for (i = 0,sp = buf; i < l; sp++, i++)        /* set up window on input */
  31.         if ((*sp = get_scan(NORMAL)) <= 0)
  32.             /* non-terminated comment */
  33.             par_error(COMMTERM, FATAL, 0);        /* must end parsing */
  34.     while (!bequal(buf, op->term, l))
  35.     {
  36.         /* move window on input */
  37.         for (sp = buf,i = 0; i < l-1; i++,sp++)
  38.             *sp = *(sp+1);
  39.         if (( *sp = get_scan(NORMAL)) <= 0)
  40.             /* non terminated comment */
  41.             par_error(COMMTERM, FATAL, 0);        /* must end parsing */
  42.     }
  43.     return (0);
  44. }
  45.